package br.com.sgbl.dao;

import br.com.sgbl.bean.Funcionario;
import br.com.sgbl.bean.Historico;
import br.com.sgbl.utils.Conexao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author heidi
 */
public class HistoricoDao {

    private static final String SQL_LISTAR =
            "SELECT * FROM historico order by id";
    private static final String SQL_INSERIR =
            "INSERT INTO historico (id, operacao, fk_funcionario_id, data) VALUES (?,?,?,curdate())";


    /*public Estoque localizar(Connection conn, long codigo) throws SQLException {
        PreparedStatement ps = conn.prepareStatement("SELECT * FROM estoque where id= ?");
        ps.setLong(1, codigo);

        ResultSet rs = ps.executeQuery();

        if (rs.first()) {
            Estoque estoque = new Estoque();
            estoque.setId(rs.getLong("id"));
            estoque.setSaldo(rs.getInt("saldo"));

            ProdutoDao produtoDao = new ProdutoDao();
            Produto produto = produtoDao.localizar(conn, rs.getLong("fk_produto_id"));
            estoque.setProduto(produto);


            TipoEmbalagemDao tipoEmbalagemDao = new TipoEmbalagemDao();
            TipoEmbalagem tipoEmbalagem = tipoEmbalagemDao.localizar(conn, rs.getLong("fk_tipo_embalagem_id"));
            estoque.setTipoEmbalagem(tipoEmbalagem);

            return estoque;
        } else {
            return null;
        }
    }*/

    public Historico salvar(Historico historico) throws SQLException {
        if (historico.getId() == 0) {
            return inserir(historico);
        } else {
            return historico;
        }
    }

    private Historico inserir(Historico historico) throws SQLException {
        Connection conn = Conexao.getConnection();

        try {
            PreparedStatement ps = conn.prepareStatement(SQL_INSERIR,
                    PreparedStatement.RETURN_GENERATED_KEYS);

            ps.setNull(1, Types.NULL);
            ps.setString(2, historico.getOperacao());
            ps.setLong(3, historico.getFuncionario().getId());

            ps.executeUpdate();

            ResultSet rs = ps.getGeneratedKeys();
            rs.first();

            historico.setId(rs.getLong("GENERATED_KEY"));

            conn.commit();
        } finally {
            conn.close();
        }

        return historico;
    }

    public List listar() throws SQLException {
        List lista = new ArrayList();

        Connection conn = Conexao.getConnection();

        try {
            PreparedStatement ps = conn.prepareStatement(SQL_LISTAR);

            ResultSet rs = ps.executeQuery();

            while (rs.next()) {
                Historico historico = new Historico();

                historico.setId(rs.getLong("id"));
                historico.setOperacao(rs.getString("operacao"));

                FuncionarioDao funcionarioDao = new FuncionarioDao();
                Funcionario funcionario = funcionarioDao.localizar(conn, rs.getLong("fk_funcionario_id"));
                historico.setFuncionario(funcionario);
                
                historico.setData(rs.getDate("data"));
       

                lista.add(historico);
            }
        } finally {
            conn.close();
        }
        return lista;
    }

}
